from flask import Flask, send_file, request, Response
from functools import wraps
import base64
import psycopg2
from configparser import ConfigParser

app = Flask(__name__)

config = ConfigParser()
config.read("config.ini")

DBNAME = config.get("DATABASE", "DATABASE").strip("'")
DBUSER = config.get("DATABASE", "USER").strip("'")
DBPASSWORD = config.get("DATABASE", "PASSWORD").strip("'")
DBHOST = config.get("DATABASE", "HOST").strip("'")

def connect_to_db():
    """Подключение к базе данных PostgreSQL."""
    conn = psycopg2.connect(dbname=DBNAME, user=DBUSER, password=DBPASSWORD, host=DBHOST)
    return conn

def get_user(username):
    """Получение пользователя из базы данных."""
    conn = connect_to_db()
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM users WHERE username = %s", (username,))
    user = cursor.fetchone()
    cursor.close()
    conn.close()
    return user

def check_auth(username, password):
    """Проверка аутентификации."""
    user = get_user(username)
    if user:
        return user[2] == password
    return False

def authenticate():
    """Отправка заголовка WWW-Authenticate для запроса аутентификации."""
    return Response(
    'Пожалуйста, введите логин и пароль.', 401,
    {'WWW-Authenticate': 'Basic realm="Login Required"'})

def requires_auth(f):
    """Декоратор для проверки аутентификации."""
    @wraps(f)
    def decorated(*args, **kwargs):
        auth = request.authorization
        if not auth or not check_auth(auth.username, auth.password):
            return authenticate()
        return f(*args, **kwargs)
    return decorated

@app.route('/download')
@requires_auth
def download_file():
    file_path = '../data/parquet/jira_tasks.parquet'  # Замените на путь к вашему файлу
    return send_file(file_path, as_attachment=True)

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0')